#!/usr/bin/env python
# -*- coding: utf-8 -*-

##########################################################################
#
#
# Relaxtives - Sistema de ayuda a escuelas para administrar parentezcos
# Copyleft (c) 2009 Escuela de Oficios San Cayetano.
# escuelasancayetano at gmail dot com
# Programado en Python
# Este programa es software libre; usted puede redistruirlo y/o modificarlo bajo
# los términos de la Licencia Pública General GNU, tal y como está publicada
# por la Free Software Foundation; ya sea la versión 2 de la Licencia, o (a su
# elección) cualquier versión posterior.
#
# Este programa se distribuye con la intención de ser útil, pero SIN NINGUNA
# GARANTÍA; incluso sin la garantía implícita de USABILIDAD O UTILIDAD PARA UN
# FIN PARTICULAR. Vea la Licencia Pública General GNU para más detalles.
#
# Usted debería haber recibido una copia de la Licencia Pública General GNU
# junto a este programa; si no es así, escriba a la Free Software Foundation,
# Inc. 675 Mass Ave, Cambridge, MA 02139, EEUU.
#
#
##########################################################################



# Comenzamos por inportar los modulos necesarios
# primer modulo es la biblioteca grafica
import wx
# ahora importamos el modulo que contiene la base de dato
import basededatos
# ahora utilizamos el modulo pickle que sirve para traer datos desde un archivo
import pickle

class Busqueda(wx.Frame): # Comienza la clase principal
    def __init__(self, *args, **kwds):
        # begin wxGlade: MyFrame.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE ^(wx.MINIMIZE_BOX|wx.MAXIMIZE_BOX)
        wx.Frame.__init__(self, *args, **kwds)
        self.panel_1 = wx.Panel(self, -1)
        self.st_Apellido = wx.StaticText(self.panel_1, -1, "Apellido:")
        self.txt_Apellido = wx.TextCtrl(self.panel_1, -1, "")
        self.cancelar = wx.Button(self.panel_1,wx.ID_CANCEL, "")
        self.buscar = wx.Button(self.panel_1, wx.ID_FIND, "")
        # Aca definimos los enlaces entre las funciones y los botones, tanto cancela como buscar
        self.Bind(wx.EVT_BUTTON, self.OnCancelar, self.cancelar)
        self.Bind(wx.EVT_BUTTON, self.OnBuscar, self.buscar)

        self.__set_properties()
        self.__do_layout()


    def __set_properties(self):
        # Esta seccion es la parte de las propiedades del Frame
        # el titulo
        self.SetTitle("Relaxtives - Busqueda")
        # los tamaños y las letras
        self.txt_Apellido.SetMinSize((200, 25))
        self.txt_Apellido.SetFocus()
        #Estilo de los botones aceptar y cancelar
        self.cancelar.SetDefault()
        self.buscar.SetDefault()

    def __do_layout(self):
        # La parte de abajo habla sobre los sizer que es como se organiza el contenido dentro del frame
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        sizer_2 = wx.BoxSizer(wx.VERTICAL)
        sizer_4 = wx.BoxSizer(wx.HORIZONTAL)
        sizer_3 = wx.BoxSizer(wx.HORIZONTAL)
        sizer_3.Add(self.st_Apellido, 0, wx.ALL, 10)
        sizer_3.Add(self.txt_Apellido, 0, wx.RIGHT|wx.TOP, 8)
        sizer_2.Add(sizer_3, 0, wx.ALL, 10)
        sizer_4.Add(self.cancelar, 0, wx.ALL, 10)
        sizer_4.Add(self.buscar, 0, wx.RIGHT|wx.TOP|wx.BOTTOM, 10)
        sizer_2.Add(sizer_4, 0, wx.ALL|wx.ALIGN_RIGHT, 10)
        self.panel_1.SetSizer(sizer_2)
        sizer_1.Add(self.panel_1, 1, 0, 0)
        self.SetSizer(sizer_1)
        sizer_1.Fit(self)
        self.Layout()
        self.Centre()


    def OnBuscar(self, event):
        # esta seria la parte de la conexion a la base de dato
        base=basededatos.conectando('relaxtives','relaxtives')
        # tomamos el valor ingresado en el dialogo de busqueda
        self.resultado=self.txt_Apellido.GetValue()
        self.Close(True)
        # creamos un cursor de la base de dato
        c = base.cursor()
        # ejecutamos una busqueda por apellido pidiendo id, apellido, nombre y documento
        c.execute('''SELECT id_alumno,apellidos,nombres,documento,responsable_1,te_resp_1,celu_resp_1,responsable_2,te_resp_2,celu_resp_2 FROM alumnos WHERE apellidos =%s''', (self.resultado))
        # tomamos los datos del cursor
        q = c.fetchall()
        # cerramos el cursor
        c.close()
        # Necesitamos realizar otra consulta pero trayendo menos datos, para elegir entre alumnos con mismo apellido
        base1=basededatos.conectando('relaxtives','relaxtives')
        c1=base1.cursor()
        c1.execute('''SELECT id_alumno,apellidos,nombres,documento FROM alumnos WHERE apellidos =%s''', (self.resultado))
        q1 = c1.fetchall()
        # los datos que vienen de una consulta a la base de datos tienen que tener forma de tupla para poder utilizarla en el control que la va a utilizar.
        self.StrAlum1 = [("%s %s %s %s" % tuple(a)) for a in q1]

        if c.rowcount==0:# en esta parte utilizamos una funcion para ver si hay algun registro
                # si no existe datos como resultado vamos a un dialogo
                self.lepifiastes()
        else:
            self.OnMultielegi()

    def OnMultielegi(self):
        # creamos un SingleChoiceDialog para traer el resultado de la busqueda
        dlg = wx.SingleChoiceDialog(None,u"Listado de alumnos que coinciden con la busqueda",u"",self.StrAlum1)
        # si el usuario preciona ok
        if dlg.ShowModal() == wx.ID_OK:
            # obtenemos el valor de la busqueda
            self.quedo= dlg.GetStringSelection()
            # Mediante el metodo split sacamos la cadena separada, y solo utilizamos el ide
            dato=self.quedo.split()
            f=open('x.txt','w')
            # esto que hago abajo esta re mal pero de alguna forma necesito sacar el id. Luego con tiempo hay que ver como arreglarlo asi no va.
            pickle.dump(dato[0], f)
            f.close()
            # En esta parte llamamos a otro .py que tiene la ventana que mostrara todo el resultado de la busqueda
            import resultado_de_busqueda
            ventana = resultado_de_busqueda.BusquedaAlumno(None, -1, "")
            ventana.Show()

    def OnCancelar(self, event):# Aca vemos la funcion que finaliza la aplicacion
        self.Close()

    def lepifiastes(self):# esta funcion nos avisa de que no hay un resultado a la busqueda solicitada
        dialogo = wx.MessageDialog(None, u'Los datos ingresados no coinciden con ningun alumno', u'Guarda', wx.OK | wx.ICON_INFORMATION)
        if dialogo.ShowModal() == wx.ID_OK:
            dialogo.Destroy()


if __name__ == "__main__":
    app = wx.App()
    ppal = Busqueda(None, -1, "")
    app.SetTopWindow(ppal)
    ppal.CenterOnScreen()
    ppal.Show()
    app.MainLoop()


# Parte del trabajo grupal hecho por

# Bruccella Cristian agustin.mendieta@gmail.com
# Monges Reinaldo reypython@gmail.com
# Carrai Pablo pablohernanjuan@hotmail.com
